//package org.example;
//
//import java.io.*;
//import java.util.List;
//import java.util.Properties;
//import java.util.ArrayList;
//import java.util.concurrent.*;
//
//import org.springframework.jdbc.core.JdbcTemplate;
//
//import com.google.common.collect.Lists;
//
//public class MultiThreadDatabaseAccess {
//
//    public static void main(String[] args) {
//
//        //读配置文件获取数据库连接信息
//        Properties props = new Properties();
//        try {
//            InputStream in = new FileInputStream(new File("database.properties"));
//            props.load(in);
//            in.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        //连接信息保存在List中
//        List<DataSourceInfo> dataSourceInfos = new ArrayList<>();
//        for (int i = 1; i <= 10; i++) {
//            String url = props.getProperty("jdbc." + i + ".url");
//            String username = props.getProperty("jdbc." + i + ".username");
//            String password = props.getProperty("jdbc." + i + ".password");
//            dataSourceInfos.add(new DataSourceInfo(url, username, password));
//        }
//
//        //将连接信息分成2组
//        List<List<DataSourceInfo>> dataSourceGroups = Lists.partition(dataSourceInfos, 5);
//
//        //创建线程池和计数器
//        ExecutorService executorService = Executors.newFixedThreadPool(2);
//        CountDownLatch countDownLatch = new CountDownLatch(2);
//
//        //创建Future列表，用于获取线程b的返回结果
//        List<Future<List<Object>>> futures = new ArrayList<>();
//
//        //多线程连接数据库，每组连接操作在一个线程中完成
//        for (List<DataSourceInfo> dataSourceGroup : dataSourceGroups) {
//            Future<List<Object>> future = executorService.submit(() -> {
//
//                //创建JdbcTemplate对象
//                Map<String, JdbcTemplate> jdbcTemplates = new ConcurrentHashMap<>();
//                for (DataSourceInfo dataSourceInfo : dataSourceGroup) {
//                    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSourceInfo.createDataSource());
//                    jdbcTemplates.put(dataSourceInfo.getUrl(), jdbcTemplate);
//                }
//
//                //查询数据库，返回结果
//                List<Object> results = new ArrayList<>();
//                for (Map.Entry<String, JdbcTemplate> entry : jdbcTemplates.entrySet()) {
//                    String dbName = entry.getKey();
//                    JdbcTemplate jdbcTemplate = entry.getValue();
//
//                    Object result = jdbcTemplate.queryForObject("select count(*) from student", Integer.class);
//                    results.add("Database " + dbName + ": " + result);
//                }
//
//                return results;
//            });
//
//            futures.add(future);
//        }
//
//        //等待多线程操作完成
//        try {
//            countDownLatch.await();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//
//        //处理结果
//        List<Object> results = new ArrayList<>();
//        for (Future<List<Object>> future : futures) {
//            try {
//                results.addAll(future.get());
//            } catch (InterruptedException | ExecutionException e) {
//                e.printStackTrace();
//            }
//        }
//
//        //打印结果
//        for (Object result : results) {
//            System.out.println(result);
//        }
//
//        //关闭线程池
//        executorService.shutdown();
//    }
//}
//
//@Data
//@AllArgsConstructor
//class DataSourceInfo {
//    private String url;
//    private String username;
//    private String password;
//
//    public DriverManagerDataSource createDataSource() {
//        DriverManagerDataSource dataSource = new DriverManagerDataSource();
//        dataSource.setUrl(url);
//        dataSource.setUsername(username);
//        dataSource.setPassword(password);
//        return dataSource;
//    }
//}